package jcl.hash.leetcode;

/**
 * 字符串中的唯一字符
 * @author yuisama
 * @date 2022/05/20 21:02
 **/
public class Num387_FirstChar {
    public int firstUniqChar(String s) {
        // 由于s只包含小写字母，因此将s中的每个字符出现的频次保存到整型数组中
        int[] freq = new int[26];
        // 遍历s这个字符串，取出每个字符，出现一次就保存到freq数组
        // "leetcode"
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 这一行代码就把字符映射成了int，每个不相同的字符都一定会唯一的映射到int
            // 'c' - 'a' => 2
            // 'a' - 'a' => 0
            // 'b' - 'a' => 1
            // 把每一个不相同的小写字母都会唯一的按照 - 'a' 的规则转为26个数字中的一个
            freq[c - 'a'] ++;
        }
        // 遍历字符串，找到freq数组中出现次数唯一的那个字符
        int retIndex = -1;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (freq[c - 'a'] == 1) {
                // 此时c这个字符就是出现次数为1的那个字符
                retIndex = i;
                break;
            }
        }
        return retIndex;
    }
}